using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Topology
{
    /// <summary>
    /// <para>Add Feature Class To Topology</para>
    /// <para>Adds a feature class to a topology.</para>
    /// <para>将要素类添加到拓扑。</para>
    /// </summary>    
    [DisplayName("Add Feature Class To Topology")]
    public class AddFeatureClassToTopology : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public AddFeatureClassToTopology()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_topology">
        /// <para>Input Topology</para>
        /// <para>The topology to which the feature class will participate.</para>
        /// <para>要素类将参与的拓扑。</para>
        /// </param>
        /// <param name="_in_featureclass">
        /// <para>Input Feature class</para>
        /// <para>The feature class to add to the topology. The feature class must be in the same feature dataset as the topology.</para>
        /// <para>要添加到拓扑的要素类。要素类必须与拓扑位于同一要素数据集中。</para>
        /// </param>
        /// <param name="_xy_rank">
        /// <para>XY Rank</para>
        /// <para>The relative degree of positional accuracy associated with vertices of features in the feature class versus those in other feature classes participating in the topology. The feature class with the highest accuracy should get a higher rank (lower number, for example, 1) than a feature class which is known to be less accurate.</para>
        /// <para>与要素类中要素的折点相关的位置精度与参与拓扑的其他要素类中的折点相关的位置精度的相对程度。与已知精度较低的要素类相比，具有最高精度的要素类应获得更高的等级（例如，1 的数字较低）。</para>
        /// </param>
        /// <param name="_z_rank">
        /// <para>Z Rank</para>
        /// <para>Feature classes that are z-aware have elevation values embedded in their geometry for each vertex. By setting a z rank, you can influence how vertices with accurate z-values are snapped or clustered with vertices that contain less accurate z measurements.</para>
        /// <para>具有 z 感知功能的要素类在每个折点的几何中都嵌入了高程值。通过设置 z 秩，您可以影响具有精确 z 值的顶点的捕捉方式，或者与包含不太精确的 z 测量值的顶点聚类的方式。</para>
        /// </param>
        public AddFeatureClassToTopology(object _in_topology, object _in_featureclass, long _xy_rank, long _z_rank)
        {
            this._in_topology = _in_topology;
            this._in_featureclass = _in_featureclass;
            this._xy_rank = _xy_rank;
            this._z_rank = _z_rank;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Add Feature Class To Topology";

        public override string CallName => "management.AddFeatureClassToTopology";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_topology, _in_featureclass, _xy_rank, _z_rank, _out_topology];

        /// <summary>
        /// <para>Input Topology</para>
        /// <para>The topology to which the feature class will participate.</para>
        /// <para>要素类将参与的拓扑。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Topology")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_topology { get; set; }


        /// <summary>
        /// <para>Input Feature class</para>
        /// <para>The feature class to add to the topology. The feature class must be in the same feature dataset as the topology.</para>
        /// <para>要添加到拓扑的要素类。要素类必须与拓扑位于同一要素数据集中。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Feature class")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_featureclass { get; set; }


        /// <summary>
        /// <para>XY Rank</para>
        /// <para>The relative degree of positional accuracy associated with vertices of features in the feature class versus those in other feature classes participating in the topology. The feature class with the highest accuracy should get a higher rank (lower number, for example, 1) than a feature class which is known to be less accurate.</para>
        /// <para>与要素类中要素的折点相关的位置精度与参与拓扑的其他要素类中的折点相关的位置精度的相对程度。与已知精度较低的要素类相比，具有最高精度的要素类应获得更高的等级（例如，1 的数字较低）。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("XY Rank")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public long _xy_rank { get; set; }


        /// <summary>
        /// <para>Z Rank</para>
        /// <para>Feature classes that are z-aware have elevation values embedded in their geometry for each vertex. By setting a z rank, you can influence how vertices with accurate z-values are snapped or clustered with vertices that contain less accurate z measurements.</para>
        /// <para>具有 z 感知功能的要素类在每个折点的几何中都嵌入了高程值。通过设置 z 秩，您可以影响具有精确 z 值的顶点的捕捉方式，或者与包含不太精确的 z 测量值的顶点聚类的方式。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Z Rank")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public long _z_rank { get; set; }


        /// <summary>
        /// <para>Updated Input Topology</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Updated Input Topology")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_topology { get; set; }


        public AddFeatureClassToTopology SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}